我一直在計算器上研究這個問題,超過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?你是否也嘗試使用命令行客戶端? –