我一直在计算器上研究这个问题,超过24小时,并决定这是不是已经覆盖尽管有许多Q &关于同一主题的其他地方。MariaDB的不会更改排序规则的数据库
我使用HeidiSQL 9.3对MariaDB的10.1,并有一个奇怪的问题如下:我最初接受的默认排序,当我建立了我的数据库,然后意识到,这不是我想要的东西,并试图
改变它ALTER DATABASE InternalFulfillment CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
,没有任何效果,并且数据库仍然是报告为ucs2_bin
和所有的程序和功能ucs2_bin
为好。我尝试了所有的建议,从每Q &一个我能找到StackOverflow上包括以下语句:
SET collation_connection = 'utf8mb4_unicode_ci';
SET NAMES 'utf8mb4';
SET CHARACTER SET 'utf8mb4';
当我删除并重新创建它们还回来作为ucs2_bin
的程序。
最奇怪的是,如果我使用名称'InternalFulfilment'删除并重新创建数据库,排序规则是错误的,但是如果我使用不同的名称创建数据库,那么我会得到我想要的排序规则,然后运行创建存储过程的脚本将创建具有utf8mb4_unicode_ci
排序规则的过程。
MariaDB和/或HeidiSQL似乎记得我第一次创建'InternalFulfillment'数据库时使用的原始归类,并且每当使用该名称创建数据库时,总是使用ucs2_bin
归类。
有没有人有这个地方可能存储,所以我可以清除它的想法。谢谢。阅读以下
答案离开这个过夜后
补充意见,第二天早上,我能够删除并重新创建具有不同的排序规则的数据库,但现在它卡上的新排序规则。
从回答@Anse继:
DROP DATABASE IF EXISTS `InternalFulfillment`;
CREATE DATABASE `InternalFulfillment` /*!40100 COLLATE 'ucs2_bin' */;
USE `InternalFulfillment`;
CREATE TABLE `table1` (
`column1` VARCHAR(50) NULL
)
COLLATE='ucs2_bin'
ENGINE=InnoDB;
DELIMITER //
CREATE DEFINER=`root`@`%` PROCEDURE `proc1`(IN `param1` VARCHAR(50))
DETERMINISTIC
BEGIN
SELECT
column1
FROM
table1 t
WHERE
t.column1 = param1;
END//
DELIMITER ;
CALL proc1('test');
产地:/* SQL Error (1267): Illegal mix of collations (ucs2_bin,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '=' */
。如果我用utf8mb4_general_ci
重新运行这个脚本,那么它完成没有错误。
昨天我的数据库被卡在ucs2_bin
,今天它卡在utf8mb4_general_ci
,所以有一些东西被缓存了很长的到期时间。
有趣的琐事问题。注意有服务器全局级别和会话级别变量。另请参阅https://dev.mysql.com/doc/refman/5.5/en/create-database.html – Drew
我写这篇文章[Here](http://stackoverflow.com/a/39384425)副本和会话变量作为存根。还与Rick聊了起来[Here](http://chat.stackoverflow.com/transcript/message/32740569#32740569)......对它进行了一段时间的讨论,并且对我自己进行了更深入的研究。我会ping里克去看看。 – Drew
很高兴知道您使用哪个MariaDB? select * from information_schema.schemata where schema ='InternalFulfillment'return?你是否也尝试使用命令行客户端? –