MySQL LOWER()函数对于º字符不是多字节安全的吗?

时间:2012-01-05 02:43:27

标签: mysql symbols multibyte lowercase

当我将以下字符编码为UTF-8时:

º

我明白了:

º

然后将º存储为字段值,我选择带有LOWER()函数的字段并获取

âº

我期待它尊重该值是一个多字节字符,因此不会对其执行LOWER。

预期:

º

我不能正确理解LOWER()函数假设是多字节安全的,如手册中所述? (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_lower

或者我在这里做错了什么?

我正在运行MySQL 5.1。

修改

表格上的编码设置为UTF-8。会话编码是默认的latin1。

以下是我的重复步骤。

CREATE TABLE test_table (
  test_field VARCHAR(1000) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO test_table(test_field) VALUES('º');

SELECT LOWER(test_field) FROM test_table;

1 个答案:

答案 0 :(得分:0)

INSERT INTO test_table(test_field) VALUES('º');

将插入一个2个字符的字符串,其中包含正确的LOWER()“⺔

  • 下(“”)是“â”
  • 下(“º”)是“º”

如果要插入“º”,请确保

SET NAMES 'utf-8';

INSERT INTO test_table(test_field) VALUES('º');