by kevin
5.
十一月 2014 23:16
>
碰到一个恶心的问题: 无法保存包含中文的字符串,查了很久,就懂的是字符集的问题。 mysql的字符集在server,database,table,column都可以定义。 查看字符集: 数据库级别 1: SELECT default_character_set_name FROM information_schema.SCHEMATA S
2: WHERE schema_name = "schemaname";
表级别
1: SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
2: information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
3: WHERE CCSA.collation_name = T.table_collation
4: AND T.table_schema = "schemaname"
5: AND T.table_name = "tablename";
列级别
1: SELECT character_set_name FROM information_schema.`COLUMNS` C
2: WHERE table_schema = "schemaname"
3: AND table_name = "tablename"
4: AND column_name = "columnname";
修改数据库字符集:
1: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
1: ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
只是修改表的默认字符集:
1: ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
修改列的字符集:
1: ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
by kevin
4.
十二月 2012 00:12
>
chicagoboss默认的使用poolboy实现mysql连接池,但是连接池的最大连接数只有10,这个可以需要通过修改源代码boss_db_sup.erl(line:19)中的max_overflow。 使用连接池连接mysql,如果服务器设置了tcp_keepalive_time,那么如果一段时间后,如果了某个连接没有数据交互,相应的socket端口会被关闭,更糟糕的是无论是mysql的服务端,还是应用客户端,都不知道该socket已经关闭,下次请求是会提示"socket is closed",而且无法重新打开。解决的办法是修改mysql_recv.erl(line:98),添加tcp连接选项{keepalive, true},显式要求连接不断开。 chicagoboss支持在每个action执行之前,执行before_{action},执行之后,执行after_{action}。before_{action}还是比较好用的,after_{action}就很鸡肋了,因为你能处理的只有html,而不是一个action result,所以这个需要自己修改boss_web_controller.erl去扩展。 mysql中的date类型,无法被chicagoboss转换成有效的数据类型,使用datetime类型或者可以尝试修改boss_record_lib.erl的convert_value_to_type方法。 chicagoboss使用Django模板引擎,所以无法调用带参数的服务端方法。但也有个好处,支持模板继承。 boss_rebar.erl存在bug,boss.config中配置vm_name,如果是dev启动vm_name,则添加为启动参数-name,如果是正常启动,则为-sname。可以修改start_cmd方法和stop_cmd方法解决。 利用view生成html。 创建一个view,会生成一个{project}_view_{folder}_{filename}_html.beam文件 调用{project}_view_{folder}_{filename}_html:render(Vars)方法,返回{ok,[Binary]} 其中Vars=[{key, Value}], Binary=<<Html>>,需要生成html的时候可以这样使用。 mochiweb中的处理进程数,可以在mochiweb_socket_server.erl中修改参数acceptor_pool_size,默认为16。
by kevin
11.
十一月 2012 05:07
>
公司新项目,使用基于erlang的mvc框架chicagoboss,数据库选择mysql。写了一个月的代码,记录些细节的东西。
将mysql表映射成model的功能,在boos_db_adapter_mysql这个模块中实现。
数据库的每张表,都需要id字段,而且字段类型必须是整形。当然,可以通过修改源码去掉这个约束(研究中)。
表名必须是严格复数格式,例如:order->orders, man->men。(ps:inflector:pluralize方法存在bug)
数据库中的外键字段,要命名成{talbe_name}_id,table_name为主表名字。
实体属性的定义遵循Pascal命名(Word1Word2),同时对应数据库字段名word1_word2