كيفية جعل الخلية التعامل مع UTF-8 بشكل صحيح

StackOverflow https://stackoverflow.com/questions/202205

  •  03-07-2019
  •  | 
  •  

سؤال

واحد من الردود السؤال الذي سألته أمس واقترح علي أن تأكد من قاعدة البيانات يمكن التعامل مع UTF-8 أحرف بشكل صحيح.كيف يمكن أن تفعل هذا مع الخلية ؟

هل كانت مفيدة؟

المحلول

تحديث:

الجواب القصير - يجب أن تكون دائما تقريبا استخدام utf8mb4 محارف ، utf8mb4_unicode_ci ترتيب.

تغيير قاعدة البيانات:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

انظر:

الجواب الأصلية:

MySQL 4.1 وما فوق لديه مجموعة الأحرف الافتراضية من UTF-8.يمكنك التحقق من هذا في my.cnf ملف, تذكر أن تعيين سواء العميل والخادم (default-character-set و character-set-server).

إذا كان لديك البيانات القائمة التي ترغب في تحويلها إلى UTF-8 ، تفريغ قاعدة البيانات الخاصة بك ، استيراده مرة أخرى كما UTF-8 التأكد من:

  • استخدام SET NAMES utf8 قبل الاستعلام/إدراج في قاعدة البيانات
  • استخدام DEFAULT CHARSET=utf8 عند إنشاء جداول جديدة
  • عند هذه النقطة MySQL الخاص بك العميل و الخادم يجب أن يكون في UTF-8 (انظر my.cnf).تذكر أي اللغات التي تستخدمها (مثل PHP) يجب أن يكون UTF-8 كذلك.بعض إصدارات PHP واستخدام الخاصة بهم مكتبة عميل الخلية التي قد لا يكون UTF-8 علم.

إذا كنت لا ترغب في ترحيل البيانات الموجودة تذكر أن النسخ الاحتياطي الأولى!الكثير من غريب choping من البيانات يمكن أن يحدث عندما لا تسير الأمور كما هو مخطط لها!

بعض الموارد:

نصائح أخرى

لجعل هذا "الدائم" ، my.cnf:

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

للتحقق ، انتقل إلى العميل وتظهر بعض المتغيرات:

SHOW VARIABLES LIKE 'character_set%';

تحقق من أن أنهم جميعا utf8, إلا ..._filesystem, التي ينبغي أن تكون binary و ..._dir, هذا نقطة في مكان ما في تركيب الخلية.

MySQL 4.1 وما فوق لديه مجموعة الأحرف الافتراضية التي المكالمات utf8 ولكن الذي هو في الواقع مجموعة فرعية فقط من UTF-8 (يسمح فقط ثلاث البايت الأحرف الصغيرة).

استخدام utf8mb4 كما charset إذا كنت ترغب في "الكامل" UTF-8.

الجواب القصير:استخدام utf8mb4 في 4 أماكن:

  • بايت في جهاز العميل utf8 لا latin1/cp1251/الخ.
  • SET NAMES utf8mb4 أو أي شيء عند وضع العميل الاتصال إلى الخلية
  • CHARACTER SET utf8mb4 على جميع الجداول/أعمدة-باستثناء الأعمدة بدقة ascii/hex/country_code/zip_code/الخ.
  • <meta charset charset=UTF-8> إذا كنت إخراج HTML.(نعم الإملائي مختلفة هنا.)

مزيد من المعلومات ;
UTF8 طول الطريق

الروابط أعلاه تقديم "مفصلة الكنسي الجواب هو مطلوب لمعالجة كل المخاوف".-- هناك حد مساحة في هذا المنتدى.

تحرير

بالإضافة إلى CHARACTER SET utf8mb4 تحتوي "جميع" في العالم حرفا ، COLLATION utf8mb4_unicode_520_ci القول 'أفضل للجميع حول' ترتيب للاستخدام.(هناك أيضا التركية, الإسبانية, الخ, الترتيب بالنسبة لأولئك الذين يريدون الفروق الدقيقة في تلك اللغات.)

Charset خاصية قاعدة البيانات (الافتراضي) الجدول.هل يمكن أن يكون نظرة (الخلية الأوامر):

show create database foo; 
> CREATE DATABASE  `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */

show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1

وبعبارة أخرى;فإنه من السهل جدا للتحقق من قاعدة البيانات الخاصة بك محارف أو تغييره:

ALTER TABLE `foo`.`bar` CHARACTER SET utf8;

لتغيير الطابع تعيين الترميز إلى UTF-8 على قاعدة البيانات نفسها, اكتب الأمر التالي في الخلية> موجه.استخدام ALTER DATABASE..محل DBNAME مع اسم قاعدة البيانات:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

هذا هو نسخة مكررة من هذا السؤال كيفية تحويل كامل قاعدة بيانات MySQL characterset و جمع إلى UTF-8?

تابعت خافيير الحل ، ولكن أضفت بعض خطوط مختلفة في بلدي.cnf:

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

وجدت هذه الفكرة هنا: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html في أول/المستخدم فقط التعليق على الجزء السفلي من الصفحة.يذكر أن تخطي تعيين شخصية العميل-المصافحة له بعض الأهمية.

هذه نصائح حول الخلية و UTF-8 قد تكون مفيدة.لسوء الحظ أنها لا تشكل الحل الكامل فقط شيوعا gotchas.

تعيين الخاص بك database collation إلى UTF-8 ثم تطبيق table collation قاعدة البيانات الافتراضي.

الجواب يمكنك تكوين من ضبط الخلية.في جوابي قد يكون شيء خرج من السياق ولكن هذا هو أيضا يعرف هو مساعدة لك.
كيفية تكوين Character Set و Collation.

للتطبيقات التي تخزن البيانات باستخدام الافتراضي الخلية مجموعة الأحرف و جمع (latin1, latin1_swedish_ci) ، أي تكوين خاص ينبغي أن تكون هناك حاجة.إذا التطبيقات تتطلب تخزين البيانات باستخدام مختلفة تعيين حرف أو ترتيب ، يمكنك تكوين مجموعة الأحرف المعلومات بعدة طرق:

  • تحديد الإعدادات الشخصية في قاعدة البيانات الخاصة بنا. على سبيل المثال التطبيقات أن استخدام قاعدة بيانات واحدة قد تتطلب utf8, بينما التطبيقات التي استخدام قاعدة بيانات أخرى قد تتطلب sjis.
  • تحديد الإعدادات الشخصية عند بدء تشغيل الملقم. يؤدي هذا الخادم إلى استخدام الإعدادات لجميع التطبيقات التي لا تجعل الآخرين الترتيبات.
  • تحديد الإعدادات الشخصية في وقت التكوين, إذا كنت بناء الخلية من المصدر.يؤدي هذا الملقم لاستخدام معين الإعدادات لجميع التطبيقات دون الحاجة إلى تحديد لهم في بدء تشغيل الملقم.

الأمثلة الموضحة هنا السؤال إلى مجموعة utf8 مجموعة الأحرف هنا أيضا تعيين ترتيب أكثر فائدة(utf8_general_ci جمع`).

تحديد الإعدادات الشخصية في قاعدة البيانات

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

تحديد الإعدادات الشخصية في بدء تشغيل الملقم

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

تحديد الإعدادات الشخصية في الخلية التكوين الوقت

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

لمعرفة القيم من مجموعة الأحرف و ترتيب متغيرات النظام التي تنطبق على الاتصال الخاص بك, استخدام هذه البيانات:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

هذه قد تكون طويلة الجواب ولكن هناك شيء يمكنك استخدام.الأمل جوابي هو مفيد بالنسبة لك.للحصول على مزيد من المعلومات http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

SET NAMES UTF8

هذا أمر لا حيلة

اتصال قاعدة البيانات الى UTF-8

$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());

مجموعة اتصال قاعدة البيانات الخاصة بك إلى UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

كان قادرا على العثور على حل.ركض التالية كما هو محدد في http://technoguider.com/2015/05/utf8-set-up-in-mysql/

SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top