xcode5.1使用ffmpeg-lib

1、编译ffmpeg;
configuration: –enable-ffplay –enable-nonfree –enable-gpl –enable-version3 –enable-postproc –enable-swscale –enable-avfilter –enable-libmp3lame –enable-libvorbis –enable-libtheora –enable-libfaac –enable-libxvid –enable-libx264 –enable-libvpx –enable-hardcoded-tables –enable-shared –enable-static –enable-runtime-cpudetect –enable-pthreads –disable-indevs –cc=clang

2、加一个编译选项,如下图红框;

3、将下图蓝框中的内容拖拽进xcode,下面那个蓝色的部分有的需要从TARGETS – General – Linked Frameworks and Libraries里面添加;

ffmpeg-xcode51

这些文件拖拽之前都需要先拷贝到项目文件夹里面来。

【 Mac 】Mac开机时能干啥

以下均基于OS X 10.9.1。

一、进入安全模式

驱动相关问题。

方法:
开机后按住 Shift + D 。

二、重置SMC

电源相关问题。

方法:
1、关闭电脑;
2、连接电源;
3、在内建键盘上,同时按下左侧的 Shift + Control + Option + Power;(可以用SoC来记忆)
4、同时松开所有键;
5、启动电脑。

三、开始硬件检测

硬件相关问题。

方法:
开机后按住持续 D,直到灰色屏幕。
2013-mid之前的机器需要插入系统安装光盘或U盘。

四、开始系统恢复

系统重装和硬盘检测。

方法:
开机后持续按住 Ctrl + R。

五、重置NVRAM

系统软件相关问题。

方法:
1、关闭电脑;
2、启动电脑;
3、按住 Command + Option + P + R 键;(因为在使用Intel CPU之前,NVRAM一直就叫PRAM,所以可以使用 Reset Pram COmmit来记忆)
4、直到电脑重新启动,您会再次听到启动声;
5、松开这些键。

【 Perl 】为什么DBI的do方法在affected rows为0时返回0E0

首先,我们需要知道三个值
1、0E0。真值,值为0;
2、0。假值,值为0;
3、undef。假值,值不为0;

所以,DBI->do()之所以不返回0,而是返回0E0,是为了表达两层意思:
1、语句执行没有失败;
2、affected行数为0。

我们可以用’0E0′ == 0 来测试0E0的值。

【 那些文档没有告诉你的事 】DBI执行UPDATE时返回了错误的affected rows值

问题描述

周末遇见这样的大坑真是让人不爽啊。
这是一个2008年就有人踩过的坑 —— http://bugs.mysql.com/bug.php?id=40673。
DBI的rows()方法以及do()方法返回的affected rows,都没有返回affected行数,而是返回匹配条件的行数。

这意味着,当我们连接MySQL连续执行3次”UPDATE table1 SET col1=’a’ WHERE id=1 LIMIT 1″时,3次DBI都会返回1。
但PHP和C的API都是头一次返回1,后面2次都返回0的。

我对DBI的好感度一下子就下降了10!

解决方法

还是求助CPAN找到了解答 —— https://rt.cpan.org/Public/Bug/Display.html?id=58595。
解决这个问题需要在new出DBI的时候显式关闭mysql_client_found_rows选项,像下面这样。

my $dbh =
  DBI->connect( $mysql_data_source, $mysql_username, $mysql_passwd,
    { 'RaiseError' => 1, 'mysql_client_found_rows' => 0, } );

事后反思

这个mysql_client_found_rows选项居然没有记录到DBI的文档里。
所以今天我才能在Google上看到如此多的抱怨,咒骂,吐槽和争执,从2008一直延续到2013。
DBI这么长的文档居然都还有遗漏事项,且给开发人员带来了如此大的困扰。

我想,现在程序外配文档的做法是值得再考虑的。
只要是分离就会有同步的问题,那由此带来的痛苦就总会源源不绝。

【 2014每月一模块 】【Redis::Term】一款Redis客户端

用惯了MySQL-Client的同学,到了Redis有没有不习惯啊?

不想在机器上装个Redis,又不想使用破旧的,连历史命令查找(ctrl+r)功能都没有的Telnet,怎么办呢?

看到下面这个画面,会不会心动一下下丫?


[chengang@local]# redist

Welcome to the Redis Terminal.  Commands end with ENTER.
Your Redis connection name is 1393842501
Connected to: 127.0.0.1:6379
Redis version: 2.8.6-standalone

Copyright (c) 2014-2015, Chen Gang. This is free software.

Type 'help' for help.

redis> info
+--------------------------------+----------------------+
| Variable_name                  | Value                |
+--------------------------------+----------------------+
| redis_build_id                 | cce2568a7c149200     |
| total_connections_received     | 2                    |
| used_memory_lua                | 33792                |
| used_memory_rss                | 1630208              |
| redis_git_dirty                | 0                    |
| loading                        | 0                    |
| redis_mode                     | standalone           |
| latest_fork_usec               | 0                    |
| repl_backlog_first_byte_offset | 0                    |
| sync_partial_ok                | 0                    |
| master_repl_offset             | 0                    |
| mem_allocator                  | libc                 |
| uptime_in_days                 | 0                    |
| gcc_version                    | 4.2.1                |
| aof_rewrite_scheduled          | 0                    |
| lru_clock                      | 972253               |
| role                           | master               |
| rdb_bgsave_in_progress         | 0                    |
| rejected_connections           | 0                    |
| repl_backlog_active            | 0                    |
| redis_git_sha1                 | 00000000             |
| sync_full                      | 0                    |
| process_id                     | 2350                 |
| used_memory_human              | 979.16K              |
| aof_current_rewrite_time_sec   | -1                   |
| used_memory                    | 1002656              |
| aof_enabled                    | 0                    |
| blocked_clients                | 0                    |
| aof_last_bgrewrite_status      | ok                   |
| aof_rewrite_in_progress        | 0                    |
| sync_partial_err               | 0                    |
| used_cpu_sys_children          | 0.00                 |
| connected_slaves               | 0                    |
| uptime_in_seconds              | 362                  |
| repl_backlog_histlen           | 0                    |
| repl_backlog_size              | 1048576              |
| os                             | Darwin 13.0.0 x86_64 |
| used_cpu_sys                   | 0.10                 |
| connected_clients              | 1                    |
| rdb_last_bgsave_time_sec       | -1                   |
| used_memory_peak_human         | 978.38K              |
| run_id                         | 64b35c99aa6020b1c328 |
| rdb_last_bgsave_status         | ok                   |
| pubsub_patterns                | 0                    |
| client_biggest_input_buf       | 0                    |
| keyspace_hits                  | 0                    |
| arch_bits                      | 64                   |
| rdb_last_save_time             | 1393842496           |
| rdb_changes_since_last_save    | 0                    |
| multiplexing_api               | kqueue               |
| config_file                    |                      |
| pubsub_channels                | 0                    |
| used_cpu_user_children         | 0.00                 |
| hz                             | 10                   |
| aof_last_rewrite_time_sec      | -1                   |
| aof_last_write_status          | ok                   |
| redis_version                  | 2.8.6                |
| used_cpu_user                  | 0.09                 |
| keyspace_misses                | 0                    |
| tcp_port                       | 6379                 |
| total_commands_processed       | 5                    |
| mem_fragmentation_ratio        | 1.63                 |
| rdb_current_bgsave_time_sec    | -1                   |
| client_longest_output_list     | 0                    |
| instantaneous_ops_per_sec      | 0                    |
| evicted_keys                   | 0                    |
| used_memory_peak               | 1001856              |
| expired_keys                   | 0                    |
+--------------------------------+----------------------+

对于还不熟悉Redis的同学,还有下面这种姿势。
所有支持的Command都在噢,而且分门别类放好了噢。

[chengang@local]# redist

Welcome to the Redis Terminal.  Commands end with ENTER.
Your Redis connection name is 1393842501
Connected to: 127.0.0.1:6379
Redis version: 2.8.6-standalone

Copyright (c) 2014-2015, Chen Gang. This is free software.

Type 'help' for help.

redis> help

CONNECTION
+---------+----------------------------------------------------+
| Command | Description                                        |
+---------+----------------------------------------------------+
| auth    | Authenticate to the server                         |
| echo    | Echo the given string                              |
| ping    | Ping the server                                    |
| quit    | Close the connection                               |
| select  | Change the selected database for the current conne |
+---------+----------------------------------------------------+

GENERIC
+-----------+----------------------------------------------------+
| Command   | Description                                        |
+-----------+----------------------------------------------------+
| del       | Delete a key                                       |
| dump      | Return a serialized version of the value stored at |
| exists    | Determine if a key exists                          |
| expire    | Set a key's time to live in seconds                |
| expireat  | Set the expiration for a key as a UNIX timestamp   |
| keys      | Find all keys matching the given pattern           |
| migrate   | Atomically transfer a key from a Redis instance to |
| move      | Move a key to another database                     |
| object    | Inspect the internals of Redis objects             |
| persist   | Remove the expiration from a key                   |
| pexpire   | Set a key's time to live in milliseconds           |
| pexpireat | Set the expiration for a key as a UNIX timestamp s |
| pttl      | Get the time to live for a key in milliseconds     |
| randomkey | Return a random key from the keyspace              |
| rename    | Rename a key                                       |
| renamenx  | Rename a key, only if the new key does not exist   |
| restore   | Create a key using the provided serialized value,  |
| scan      | Incrementally iterate the keys space               |
| sort      | Sort the elements in a list, set or sorted set     |
| ttl       | Get the time to live for a key                     |
| type      | Determine the type stored at key                   |
+-----------+----------------------------------------------------+

HASH
+--------------+----------------------------------------------------+
| Command      | Description                                        |
+--------------+----------------------------------------------------+
| hdel         | Delete one or more hash fields                     |
| hexists      | Determine if a hash field exists                   |
| hget         | Get the value of a hash field                      |
| hgetall      | Get all the fields and values in a hash            |
| hincrby      | Increment the integer value of a hash field by the |
| hincrbyfloat | Increment the float value of a hash field by the g |
| hkeys        | Get all the fields in a hash                       |
| hlen         | Get the number of fields in a hash                 |
| hmget        | Get the values of all the given hash fields        |
| hmset        | Set multiple hash fields to multiple values        |
| hscan        | Incrementally iterate hash fields and associated v |
| hset         | Set the string value of a hash field               |
| hsetnx       | Set the value of a hash field, only if the field d |
| hvals        | Get all the values in a hash                       |
+--------------+----------------------------------------------------+

LIST
+------------+----------------------------------------------------+
| Command    | Description                                        |
+------------+----------------------------------------------------+
| blpop      | Remove and get the first element in a list, or blo |
| brpop      | Remove and get the last element in a list, or bloc |
| brpoplpush | Pop a value from a list, push it to another list a |
| lindex     | Get an element from a list by its index            |
| linsert    | Insert an element before or after another element  |
| llen       | Get the length of a list                           |
| lpop       | Remove and get the first element in a list         |
| lpush      | Prepend one or multiple values to a list           |
| lpushx     | Prepend a value to a list, only if the list exists |
| lrange     | Get a range of elements from a list                |
| lrem       | Remove elements from a list                        |
| lset       | Set the value of an element in a list by its index |
| ltrim      | Trim a list to the specified range                 |
| rpop       | Remove and get the last element in a list          |
| rpoplpush  | Remove the last element in a list, append it to an |
| rpush      | Append one or multiple values to a list            |
| rpushx     | Append a value to a list, only if the list exists  |
+------------+----------------------------------------------------+

PUBSUB
+--------------+----------------------------------------------------+
| Command      | Description                                        |
+--------------+----------------------------------------------------+
| psubscribe   | Listen for messages published to channels matching |
| publish      | Post a message to a channel                        |
| pubsub       | Inspect the state of the Pub/Sub subsystem         |
| punsubscribe | Stop listening for messages posted to channels mat |
| subscribe    | Listen for messages published to the given channel |
| unsubscribe  | Stop listening for messages posted to the given ch |
+--------------+----------------------------------------------------+

SCRIPTING
+---------------+----------------------------------------------------+
| Command       | Description                                        |
+---------------+----------------------------------------------------+
| eval          | Execute a Lua script server side                   |
| evalsha       | Execute a Lua script server side                   |
| script exists | Check existence of scripts in the script cache.    |
| script flush  | Remove all the scripts from the script cache.      |
| script kill   | Kill the script currently in execution.            |
| script load   | Load the specified Lua script into the script cach |
+---------------+----------------------------------------------------+

SERVER
+------------------+----------------------------------------------------+
| Command          | Description                                        |
+------------------+----------------------------------------------------+
| bgrewriteaof     | Asynchronously rewrite the append-only file        |
| bgsave           | Asynchronously save the dataset to disk            |
| client getname   | Get the current connection name                    |
| client kill      | Kill the connection of a client                    |
| client list      | Get the list of client connections                 |
| client pause     | Stop processing commands from clients for some tim |
| client setname   | Set the current connection name                    |
| config get       | Get the value of a configuration parameter         |
| config resetstat | Reset the stats returned by INFO                   |
| config rewrite   | Rewrite the configuration file with the in memory  |
| config set       | Set a configuration parameter to the given value   |
| dbsize           | Return the number of keys in the selected database |
| debug object     | Get debugging information about a key              |
| debug segfault   | Make the server crash                              |
| flushall         | Remove all keys from all databases                 |
| flushdb          | Remove all keys from the current database          |
| info             | Get information and statistics about the server    |
| lastsave         | Get the UNIX time stamp of the last successful sav |
| monitor          | Listen for all requests received by the server in  |
| save             | Synchronously save the dataset to disk             |
| shutdown         | Synchronously save the dataset to disk and then sh |
| slaveof          | Make the server a slave of another instance, or pr |
| slowlog          | Manages the Redis slow queries log                 |
| sync             | Internal command used for replication              |
| time             | Return the current server time                     |
+------------------+----------------------------------------------------+

SET
+-------------+----------------------------------------------------+
| Command     | Description                                        |
+-------------+----------------------------------------------------+
| sadd        | Add one or more members to a set                   |
| scard       | Get the number of members in a set                 |
| sdiff       | Subtract multiple sets                             |
| sdiffstore  | Subtract multiple sets and store the resulting set |
| sinter      | Intersect multiple sets                            |
| sinterstore | Intersect multiple sets and store the resulting se |
| sismember   | Determine if a given value is a member of a set    |
| smembers    | Get all the members in a set                       |
| smove       | Move a member from one set to another              |
| spop        | Remove and return a random member from a set       |
| srandmember | Get one or multiple random members from a set      |
| srem        | Remove one or more members from a set              |
| sscan       | Incrementally iterate Set elements                 |
| sunion      | Add multiple sets                                  |
| sunionstore | Add multiple sets and store the resulting set in a |
+-------------+----------------------------------------------------+

SORTED_SET
+------------------+----------------------------------------------------+
| Command          | Description                                        |
+------------------+----------------------------------------------------+
| zadd             | Add one or more members to a sorted set, or update |
| zcard            | Get the number of members in a sorted set          |
| zcount           | Count the members in a sorted set with scores with |
| zincrby          | Increment the score of a member in a sorted set    |
| zinterstore      | Intersect multiple sorted sets and store the resul |
| zrange           | Return a range of members in a sorted set, by inde |
| zrangebyscore    | Return a range of members in a sorted set, by scor |
| zrank            | Determine the index of a member in a sorted set    |
| zrem             | Remove one or more members from a sorted set       |
| zremrangebyrank  | Remove all members in a sorted set within the give |
| zremrangebyscore | Remove all members in a sorted set within the give |
| zrevrange        | Return a range of members in a sorted set, by inde |
| zrevrangebyscore | Return a range of members in a sorted set, by scor |
| zrevrank         | Determine the index of a member in a sorted set, w |
| zscan            | Incrementally iterate sorted sets elements and ass |
| zscore           | Get the score associated with the given member in  |
| zunionstore      | Add multiple sorted sets and store the resulting s |
+------------------+----------------------------------------------------+

STRING
+-------------+----------------------------------------------------+
| Command     | Description                                        |
+-------------+----------------------------------------------------+
| append      | Append a value to a key                            |
| bitcount    | Count set bits in a string                         |
| bitop       | Perform bitwise operations between strings         |
| decr        | Decrement the integer value of a key by one        |
| decrby      | Decrement the integer value of a key by the given  |
| get         | Get the value of a key                             |
| getbit      | Returns the bit value at offset in the string valu |
| getrange    | Get a substring of the string stored at a key      |
| getset      | Set the string value of a key and return its old v |
| incr        | Increment the integer value of a key by one        |
| incrby      | Increment the integer value of a key by the given  |
| incrbyfloat | Increment the float value of a key by the given am |
| mget        | Get the values of all the given keys               |
| mset        | Set multiple keys to multiple values               |
| msetnx      | Set multiple keys to multiple values, only if none |
| psetex      | Set the value and expiration in milliseconds of a  |
| set         | Set the string value of a key                      |
| setbit      | Sets or clears the bit at offset in the string val |
| setex       | Set the value and expiration of a key              |
| setnx       | Set the value of a key, only if the key does not e |
| setrange    | Overwrite part of a string at key starting at the  |
| strlen      | Get the length of the value stored in a key        |
+-------------+----------------------------------------------------+

TRANSACTIONS
+---------+----------------------------------------------------+
| Command | Description                                        |
+---------+----------------------------------------------------+
| discard | Discard all commands issued after MULTI            |
| exec    | Execute all commands issued after MULTI            |
| multi   | Mark the start of a transaction block              |
| unwatch | Forget about all watched keys                      |
| watch   | Watch the given keys to determine execution of the |
+---------+----------------------------------------------------+

当然啦,最后必须还是可以这么玩的——


[chengang@local]# redist

Welcome to the Redis Terminal.  Commands end with ENTER.
Your Redis connection name is 1393842501
Connected to: 127.0.0.1:6379
Redis version: 2.8.6-standalone

Copyright (c) 2014-2015, Chen Gang. This is free software.

Type 'help' for help.

redis> set akey somevalue
OK
redis> get akey
somevalue
redis>

这只是个例子,所有的命令都支持的哦。


[chengang@local]# redist

Welcome to the Redis Terminal.  Commands end with ENTER.
Your Redis connection name is 1393842501
Connected to: 127.0.0.1:6379
Redis version: 2.8.6-standalone

Copyright (c) 2014-2015, Chen Gang. This is free software.

Type 'help' for help.

redis> set akey somevalue
OK
redis> get akey
somevalue
(reverse-i-search) `s': set akey somevalue

你看,ctrl+r也妥妥的的呢。

熟悉MySQL的同学会不会有找到家的感觉呢?

这一切都是真实的哦,而且一句话就可以把这个叫Redis::Term的Client安装好哦——
使用Mac的同学别忘记模块要使用root用户安装~

curl -L -k http://cpanmin.us | perl - -n Redis::Term

别客气,少年。

Term::ReadLine如何支持历史回顾和ctrl+r

利用Perl的Term::ReadLine可以造出和shell一样的交互式运行环境。

但默认使用的话可能会遭遇两个小麻烦。

麻烦一

不支持用上箭头键重复之前输入过的命令,也不支持ctrl+r进行历史搜索。
即使调用了$term->addhistory()也一样。

解决这个问题需要把原先的——

use Term::ReadLine;

显式写成

use Term::ReadLine;
use Term::ReadLine::Perl;

如果使用这个呢,为了保证在所有系统上的兼容性,最好再显示表明

use Term::ReadKey;

或者这样——

use Term::ReadLine;
use Term::ReadLine::Gnu;

$term->addhistory()可以不用。

麻烦二

提示符下面有一条横线。
我们可以在初始化完成Term::ReadLine后,这样去掉那画蛇添足的横线——

$term->ornaments(0);

另外,附赠一个Term::UI,相信对使用Term::ReadLine的人会有帮助。

HTTP Live Streaming协议草案各版本加入的新特性

HTTP Live Streaming协议标准——
http://tools.ietf.org/html/draft-pantos-http-live-streaming

此标准2009年5月1日首次提出后,历经相当积极的更新修改,各版本特性演进大致如下。

草案2
at 2009/10/05

1、加入EXT-X-DISCONTINUITY标签。
此标签提示播放器重置编码参数、文件格式、时间戳等内容。
可用于将数段视频放到一个M3U8中,比如无缝在视频内插入广告内容。

2、增加对HTTP头中Content-Type的要求。
规定视频索引的MIME为’application/vnd.apple.mpegurl’;

3、支持了冗余流。
这个特性对增强流的可用性起到了相当大的作用,且给视频CDN的可用性架构留下了腾挪空间;

草案3
at 2010/04/02 EXT-X-VERSION:2

1、增加EXT-X-VERSION标签用以标示协议版本。
此标签只能有0或1个,不写代表使用版本1。

2、支持AES-128加密时在EXT-X-KEY标签中指定IV。
在此之前支持是不可以指定IV的,加密时只允许使用文件片的sequence number作为加密向量。
这个改进一定程度上简化了HLS加密的实现难度。

3、现在可以在EXT-X-STREAM_INF标签中指定视频分辨率,纠正了CODEC属性的值;

草案4
at 2010/06/05

增加了时控元信息接口,介绍自定义扩展协议的方法。

草案5
at 2010/11/19 EXT-X-VERSION:3

允许在EXTINF标签中指定小数的文件片时长。
这是一个特别迫切的需求;
之前的版本规定文件片时长只能是整数。本来一片也只有几秒钟,抹去小数位会对客户端seek和buffer的计算精度产生相当的影响;

草案6
at 2011/03/31

增加了EXT-X-PLAYLIST-TYPE标签。
通过这个标签,可以直接指明当前视频是点播还是直播;
而以前只能通过M3U8的末尾是否存在EXT-X-ENDLIST来区分点播和直播;

草案7
at 2011/09/30 EXT-X-VERSION:4

1、增加了EXT-X-BYTERANGE标签。
此标签用以说明指定URI的某个偏移之后才是提供给HLS的文件片;
此功能有助于原先全是的大文件的视频供应商们往HLS的迁移;

2、可以在EXT-X-STREAM-INF标签的属性列表中直接指明当前流是VIDEO还是AUDIO;

3、增加了EXT-X-MEDIA标签。
此标签用于指定与主播出流相同地位的一些可替代流;
可以基于此标签实现多音轨选择或者多机位多视角的切换;

4、增加了EXT-X-I-FRAMES-ONLY和EXT-X-I-FRAME-STREAM-INF标签。
如果它们存在,说明播出流是一个只包含I帧的流;
可利用此功能实现类似GIF或者数字电影的功能;

草案8
at 2012/03/23

进一步细化了EXTINF标签的定义,提升了其重要性;

草案9
at 2012/09/22 EXT-X-VERSION:5

1、新增了EXT-X-MAP标签。
此标签用于指示在EXT-X-I-FRAMES-ONLY的流中如何获取MPEGTS的PAT/PMT信息;
通常是另附URI的方式。

2、给EXT-X-KEY标签增加了KEYFORMAT和KEYFORMATVERSIONS属性。
用以详细说明加密密钥的打包方式;

3、通过扩展EXT-X-STREAM-INF和EXT-X-MEDIA标签支持了字幕功能;

草案10
at 2012/10/15

纠正了X-TIMESTAMP-MAP的错误描述。

草案11
at 2013/04/16

1、对EXT-X-TARGETDURATION、EXT-X-MEDIA-SEQUENCE、EXT-X-KEY等标签的用法做进一步的澄清;

2、一致性纠正和一些其他小错误的弥补;

草案12
at 2013/10/14 EXT-X-VERSION:6

1、允许不包含EXT-X-I-FRAMES-ONLY标签的流使用EXT-X-MAP;

2、删除EXT-X-STREAM-INF和EXT-X-I-FRAME-STREAM-INF标签的PROGRAM-ID属性。

MySQL表操作的耗时数量级

面对Alter一个表和复制一个表的操作的时候,迟疑了。

原来这么多次了,我心里还是对MySQL操作表耗时的数量级没底。

把今天操作的耗时记录一下:

55万行的表,带数据复制出一个新表耗时33秒。

同样这个表,Alter加一个字段耗时50秒。

表详情如下。

mysql> select * from information_schema.tables where table_name='z_channel_list'\G
*************************** 1. row ***************************
  TABLE_CATALOG: def
   TABLE_SCHEMA: weitv_video
     TABLE_NAME: z_channel_list
     TABLE_TYPE: BASE TABLE
         ENGINE: InnoDB
        VERSION: 10
     ROW_FORMAT: Compact
     TABLE_ROWS: 555933
 AVG_ROW_LENGTH: 1369
    DATA_LENGTH: 761266176
MAX_DATA_LENGTH: 0
   INDEX_LENGTH: 208257024
      DATA_FREE: 4194304
 AUTO_INCREMENT: NULL
    CREATE_TIME: 2014-02-18 15:14:52
    UPDATE_TIME: NULL
     CHECK_TIME: NULL
TABLE_COLLATION: utf8_general_ci
       CHECKSUM: NULL
 CREATE_OPTIONS:
  TABLE_COMMENT: