2017-03-03 3 views
0

私のCMSが私にエラーを出す理由を突き止めようとしていますが、SQLFiddleとphpMyAdminは両方とも、 。だから、サンプルデータmySQL:操作 '='のための照合(utf8mb4_bin、IMPLICIT)と(utf8_general_ci、COERCIBLE)の不正な組み合わせ

http://sqlfiddle.com/#!9/cadc53/2

CREATE TABLE IF NOT EXISTS `glinks_Sales` (
    `TransactionID` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Billing_Name` char(255) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Billing_Street` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Billing_City` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Billing_State` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Billing_PostCode` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Billing_Country` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_Name` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_Street` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_City` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_State` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_PostCode` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Shipping_Country` varchar(255) COLLATE utf8mb4_bin NOT NULL, 
    `Been_Dispatched` int(11) NOT NULL, 
    `Postcode_Check_Status` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Billing_Street_2` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Shipping_Street_2` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Items_In_Order` longtext COLLATE utf8mb4_bin, 
    `Email` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, 
    `unique_id` int(11) NOT NULL, 
    `Order_Date` bigint(20) DEFAULT NULL, 
    `Method` char(10) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Currency` char(3) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Shipping_Amount` float DEFAULT NULL, 
    `Language` varchar(5) COLLATE utf8mb4_bin DEFAULT NULL, 
    `Cancelled` int(11) DEFAULT NULL, 
    `TrackingNumber` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL, 
    `PostageCompany` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; 

ALTER TABLE `glinks_Sales` 
    ADD PRIMARY KEY (`unique_id`); 

INSERT INTO `glinks_Sales` (`TransactionID`, `Billing_Name`, `Billing_Street`, `Billing_City`, `Billing_State`, `Billing_PostCode`, `Billing_Country`, `Shipping_Name`, `Shipping_Street`, `Shipping_City`, `Shipping_State`, `Shipping_PostCode`, `Shipping_Country`, `Been_Dispatched`, `Postcode_Check_Status`, `Billing_Street_2`, `Shipping_Street_2`, `Items_In_Order`, `Email`, `unique_id`, `Order_Date`, `Method`, `Currency`, `Shipping_Amount`, `Language`, `Cancelled`, `TrackingNumber`, `PostageCompany`) VALUES ('8LL79654AS664260H', 'Andyííííééé Íóé', 'xxxx', 'Rudgwick', 'West Sussex', 'xxx', 'GB', 'Andyííííééé Íóé ', 'foo', 'x', 'West Sussex', 'x', 'GB', 1488558170, '1', '', '', 'test', '[email protected]', 15, 1488472336, 'PayPal', '', 10, 'en', NULL, 'foo', 'royal mail'); 

が続いてサンプルクエリがうまく動作します

SELECT * FROM glinks_Sales WHERE (Shipping_Name = "Andyííííééé Íóé" OR Email = "Íóé" OR unique_id = "Íóé" OR TrackingNumber = "Íóé" OR PostageCompany = "Íóé") 

をつかむためにここにフィドルです。

SELECT * FROM glinks_Sales WHERE (TransactionID = ?) ORDER BY Order_Date ASC' 

を...、それがエラーを吐く:しかし、データベースにアクセスし、私のPerlスクリプトが行う

Illegal mix of collations (utf8mb4_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

私はそれからutf8_general_ciを得ることになる場所へと困惑していますか?私は何か愚かなものを逃しているに違いないが、私はそれを見ることができない。うまくいけば目の新鮮なペアが助けになるでしょう!

ありがとうございました!

+1

照合ミックスは痛みを伴うことがあります。 'SET collat​​ion_connection = 'utf8mb4_bin''を試してみてください。データベース、サーバ、または接続の他の照合設定を確認してください:http://stackoverflow.com/a/372​​98732/1363190 –

+0

ありがとうございます。私:)答えとして追加してください、私は受け入れるでしょう。それは私の髪の多くを救った!笑 –

+1

それはあなたのために働いたことを聞いてよかった。あなたがそれを受け入れるなら、私は今、答えを作りました。 –

答えて

1

照合ミックスは痛みを伴う可能性があります。クエリの前SET collation_connection = 'utf8mb4_bin'に試してみてください。

SET collation_connection = 'utf8mb4_bin'; 

SELECT * FROM glinks_Sales WHERE (TransactionID = ?) ORDER BY Order_Date ASC'; 

あなたのクエリを実行する前に、これは、接続の照合順序を設定します。

これでうまくいかない場合は、データベース、サーバー、または接続のその他の照合設定を確認してください。あなたはここでいくつかのヒントを見つける:https://stackoverflow.com/a/37298732/1363190

関連する問題