我有遗留系统运行MySQL 5.0.67。
列排序规则设置为latin1_swedish_ci。
从DB获取数据并生成charset=windows-1257
页面的PHP脚本。
在PHP中,页面语言特定的字符显示正确。
当我直接查看数据库数据时,我可以看到这些字符没有正确显示。我看到Rûta而不是Rūta,Agnë而不是Agnė。
我无法写入数据库或更改其参数。
当我跑步时
SELECT a.Name COLLATE cp1257_general_ci FROM agent a
我收到错误
COLLATION 'cp1257_general_ci' is not valid for CHARACTER SET 'latin1'
如何使用正确的字符从db获取数据?
编辑:
SHOW VARIABLES LIKE '%char%';
character_set_client latin1
character_set_connection latin1
character_set_database cp1257
character_set_filesystem binary
character_set_results
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/local/share/mysql/charsets/
和
show variables like 'collation%';
collation_connection latin1_swedish_ci
collation_database cp1257_lithuanian_ci
collation_server latin1_swedish_ci
答案 0 :(得分:0)
如果您从
获取latin1
,请结帐
mysql> SHOW VARIABLES LIKE '%char%';
然后,在mysql配置(my.cnf
)中添加以下行,并重新启动mysql服务器
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
character-set-client-handshake = false
最后检查你从
获得的内容mysql> show variables like 'collation%';
供参考:
http://dev.mysql.com/doc/refman/5.6/en/charset-literal.html
http://dev.mysql.com/doc/refman/5.6/en/charset-applications.html
答案 1 :(得分:0)
计划A:完全使用cp1257:
SET NAMES cp1257;
declare columns to be `CHARACTER SET cp1257`
mysql> SET NAMES cp1257;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | cp1257 |
| character_set_connection | cp1257 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | cp1257 |
| character_set_server | latin1 |
| character_set_system | utf8 |
请注意,设置了3个变量。
计划B:使用utf8而不是cp1257。
SET NAMES
必须匹配您在客户端中的编码。如果ū
是单字节十六进制FB
,则必须使用cp1257。如果是2字节的十六进制C5AB
,则必须使用utf8。
独立地,您可以将表列设置为cp1257或utf8。 cp1257仅允许使用立陶宛语和其他一些语言。 utf8允许使用所有语言。
latin1中的 FB
呈现为û
,因此您获得的字符串不正确。