列的错误排序规则

时间:2015-05-29 12:02:11

标签: mysql character-encoding

我有遗留系统运行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

2 个答案:

答案 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呈现为û,因此您获得的字符串不正确。