【发布时间】:2018-03-03 08:17:04
【问题描述】:
MySQL 5.6。我无法在视图中获取字符串常量以针对具有默认 UCS2 字符集的数据库正确填充。在 5.7 上运行良好。
我在下面创建了一个可重现性极低的示例。
DROP SCHEMA IF EXISTS test3;
CREATE SCHEMA test3 CHARACTER SET ucs2;
CONNECT test3;
CREATE TABLE testtable (
testname VARCHAR(15)
);
INSERT INTO testTable( testname ) VALUES ('foo');
INSERT INTO testTable( testname ) VALUES ('bar');
CREATE OR REPLACE VIEW testview AS
SELECT * FROM testtable
WHERE testname = 'foo';
SELECT * FROM testview;
^^^ 此 select 语句不返回任何结果。
MySQL [test3]> 显示创建视图 testview \G ****************************** 1. 行 ************************ ******* 视图:测试视图 创建视图:CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testview` AS select `testtable`.`testname` AS 来自`testtable`的`testname` where (`testtable`.`testname` = '\0\0\0f\0\0\0o\0\0\0o') character_set_client: utf8 collation_connection:utf8_general_ci那是什么,utf32??
以下确实有效,但我不想将排序规则直接写入语句中,因为这需要是可移植代码并且语法看起来不标准:
CREATE OR REPLACE VIEW testview AS
SELECT * FROM testtable
WHERE testname = 'foo' COLLATE utf8_general_ci;
我尝试将客户端、连接和服务器字符集设置为 ucs2 和 utf16,但这没有任何改变。对于 *_general_ci 的排序规则也是如此。
有任何想法吗?
编辑:
MySQL [test3]> 显示变量,如“char%”; +--------------------------+---------- --------------------------------------------------+ |变量名 |价值 | +--------------------------+---------- --------------------------------------------------+ | character_set_client | utf8 | |字符集连接 | utf8 | |字符集数据库 | ucs2 | |字符集文件系统 |二进制 | |字符集结果 | utf8 | | character_set_server |拉丁语1 | |字符集系统 | utf8 | |字符集目录 | C:\Program Files\MySQL\mysql-5.6.36-winx64\share\charsets\ | +--------------------------+---------- --------------------------------------------------+
【问题讨论】: