Perl 板


LINE

※ 引述《paulpu (paulpu)》之铭言: : 除了use utf8 : 和 : $db_ref->do("set character set utf8"); : 之外 : 也有 : unless(utf8::is_utf8($this)){ : utf8::encode($this); : } : 将insert的query转成utf8 : 但是...到资料库里一看 : 那些wide character都变成问号了 : 不太想用gui的东西直接import raw data : 请教一下有人有类似的经验或解法吗 : thx 这个问题我也正在厘清中,当中如有错误请多指教,分享一下理解的心得: 以 mysql (MyISAM)为例,预设: mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | read-only variable | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ mysql> SHOW VARIABLES LIKE 'COLLA%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | 与 character_set_database 相关。 | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 改变为 utf8: mysql> charset utf8; Charset changed mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | 作用於 charset utf8; | character_set_connection | utf8 | 作用於 charset utf8; | character_set_database | ucs2 | 看 database 的定义 | character_set_filesystem | binary | | character_set_results | utf8 | 可为 NULL,作用於 charset utf8; | character_set_server | latin1 | | character_set_system | utf8 | read-only variable | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ mysql> SHOW VARIABLES LIKE 'COLLA%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | 作用於 charset utf8; | collation_database | latin1_swedish_ci | 与 character_set_database 相关。 | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 这关系到 collation (校对) 的定义,包含有 server、connection、database、 table 与 field 的设定,以及使用何种字元集 ucs2、utf8、latin1、big5 等。 其中 ucs2 不能当作 client character set,也就是不能 SET NAMES 'x' 或是 SET CHARACTER SET 'x','x' 如 utf8、latin1 或 big5 等。 而 SET NAMES 'x' 等价於 SET character_set_client = x; SET character_set_results = x; SET character_set_connection = x; SET collation_connection = default collation for x SET CHARACTER SET 'x' 则等价於 SET character_set_client = x; SET character_set_results = x; SET collation_connection = @@collation_database; mysql> charset 'x'; character_set_client = x character_set_results = x; character_set_connection = x collation_connection = default collation for x ** 其中 character_set_database 与 collation_database 相关。 ** 以下分为几个部份,注意其中的编码方式,以避免出现问号: 1. 大致上可先确认 Perl 的输出字串是用何种编码方式 ucs2 或 utf8, 这部份可以用 print Data::Dump->dump($str); 来观察。 2. 再来是定义 database、table、field 的 collation (校对),如 ucs2_general_ci、 utf8_general_ci 或是 latin1_general_ci 等,会影响到字元集设定。 3. 设定与资料库连结时的字元集设定,使用 SET NAMES 'x' 或是 SET CHARACTER SET 'x'。 4. 从资料库回传结果时,character_set_results 是否转换编码。 5. 输出至 stdout 的编码方式,utf8、ucs2 (wide character) 或是 big5 等。 建议参考文件: * 第10章:字元编码支援 http://twpug.net/docs/mysql-5.1/charset.html * 9.1.4. Connection Character Sets and Collations http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html * 10.5. Data Type Storage Requirements http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.64.133 ※ 编辑: liyih 来自: 140.114.64.133 (07/20 14:45)
1F:推 cutecpu:推!好详细呀 07/20 17:50







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP