व्यक्तिगत रूप से मैं utf8_unicode_ci
के साथ जाऊंगा, यदि आप उम्मीद करते हैं कि आमतौर पर उन पत्रों के लिए लेटरकेस महत्वपूर्ण नहीं है जो आप खोजना चाहते हैं।
कॉलेशन न केवल रनटाइम पर उपयोग किए जाते हैं, बल्कि जब MySQL इंडेक्स बनाता है। इसलिए यदि इनमें से कोई भी कॉलम किसी इंडेक्स में दिखाई देता है, तो उस संयोजन के तुलना नियमों के अनुसार डेटा ढूंढना जितना तेज़ होगा उतना तेज़ होगा।
उन मामलों में जहां आप केस असंवेदनशील मिलान नहीं चाहते हैं, तो ऊपरी या निचले हिस्से को लागू न करें। इसके बजाय, कॉलम के अनुसार एक के बजाय एक शाब्दिक कोड-पॉइंट तुलना को बल देने के लिए utf8 कॉलम के सामने BINARY
कीवर्ड लागू करें।
mysql> create table utf8 (name varchar(24) charset utf8 collate utf8_general_ci, primary key (name));
Query OK, 0 rows affected (0.14 sec)
mysql> insert into utf8 values ('Roland');
Query OK, 1 row affected (0.00 sec)
mysql> insert into utf8 values ('roland');
ERROR 1062 (23000): Duplicate entry 'roland' for key 'PRIMARY'
mysql> select * from utf8 where name = 'roland';
+--------+
| name |
+--------+
| Roland |
+--------+
1 row in set (0.00 sec)
mysql> select * from utf8 where binary name = 'roland';
Empty set (0.01 sec)
यह कम या ऊपरी उपयोग करते हुए, के बाद से उन मामलों में, MySQL पहले कॉलम मूल्य की एक प्रतिलिपि बनाने और उसके lettercase संशोधित, और फिर तुलना लागू करने के लिए की जरूरत है की तुलना में बहुत तेजी से होना चाहिए। जगह में बिनरी के साथ यह मैचों को खोजने के लिए पहले इंडेक्स का उपयोग करेगा, और उसके बाद कोड-पॉइंट तुलना द्वारा कोड-पॉइंट करें, जब तक कि यह नहीं मिलता कि मान बराबर नहीं हैं, जो आमतौर पर तेज़ होगा।
* @ORM\Table(name = "Table", options={"collate"="utf8_bin"})
चूंकि मेरे समग्र प्राथमिक कुंजी के कुछ पाठ क्षेत्रों में शामिल हैं:
स्रोत
2012-06-07 10:40:57
तो मैं क्या उपयोग करूं .be विशिष्ट –
जैसा कि मैंने कहा था, आपको यह निर्णय लेना चाहिए कि आपको क्या चाहिए। जो कुछ मैं करने की कोशिश कर रहा हूं उसके बारे में मैं देख सकता हूं, मैं स्वयं 'utf8_general_ci' के साथ जाऊंगा। –
क्या utf8_bin –