আমি কীভাবে মাইএসকিউএল-এ হাসি মুখগুলি inোকাতে পারি (😊)


18

আমি মাইএসকিউএল 5.5.21 এ আছি এবং '\ xF0 \ x9F \ x98 \ x8A' স্মাইলি মুখের চরিত্রটি sertোকানোর চেষ্টা করছি। তবে আমার জীবনের জন্য, আমি কীভাবে এটি করব তা বুঝতে পারি না।

বিভিন্ন ফোরামে যেগুলি আমি পড়ছি তা অনুসারে এটি সম্ভব। তবে যখনই আমি এটি চেষ্টা করি তখনই ডেটাটি কেটে যায়।

mysql> INSERT INTO hour  (  `title`,   `content`,   `guid` ,  `published` , `lang` ,  `type` ,  
       `indegree` ,  `lon` ,  `lat` ,  `state` ,  `country` , `hour`  )   
       VALUES ( "title" ,  "content 😊  content" ,  "guid" ,  1,  1,   
                     "WEBLOG",  1,  1,  1,  "state" ,  "country" ,  1 );
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------+
| Level   | Code | Message                                                                       |
+---------+------+-------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A  ...' for column 'content' at row 1 |
| Warning | 1265 | Data truncated for column 'published' at row 1                                |
+---------+------+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> select LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|           687302 |
+------------------+
1 row in set (0.00 sec)

mysql> select * from hour where id = 687302;
+--------+-------+----------+------+---------------------+
| id     | title | content  | guid | published           |
+--------+-------+----------+------+---------------------+
| 687302 | title | content  | guid | 0000-00-00 00:00:00 |
+--------+-------+----------+------+---------------------+
1 row in set (0.00 sec)

তবে আমার টেবিলের সংজ্ঞাটি নিম্নরূপ।

CREATE TABLE `hour` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  `content` text CHARACTER SET utf8 NOT NULL,
  `guid` varchar(255) CHARACTER SET utf8 NOT NULL,
  `published` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `lang` tinyint(3) unsigned NOT NULL,
  `type` enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL,
  `indegree` int(4) unsigned NOT NULL,
  `lon` float DEFAULT NULL,
  `lat` float DEFAULT NULL,
  `state` varchar(50) CHARACTER SET utf8 DEFAULT '',
  `country` varchar(50) CHARACTER SET utf8 DEFAULT '',
  `hour` int(2) DEFAULT NULL,
  `gender` enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL,
  `time_zone` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=687560 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288 

কেউ দেখতে পাবে যে আমি CHARSET = utf8mb4 ব্যবহার করছি। নিশ্চয় এটি মাল্টি-বাইট অক্ষর ব্যবহারের চারপাশে সমস্যাগুলি সংশোধন করে?

ঠিক আছে, তাই আমি লক্ষ্য করিনি:

  `content` text CHARACTER SET utf8 NOT NULL,

আমি এখন এটি সংশোধন করেছি, কিন্তু এখনও মজার ফলাফল পেতে।

CREATE TABLE `hourtmp` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  `content` text NOT NULL,
  `guid` varchar(255) CHARACTER SET utf8 NOT NULL,
  `published` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `lang` tinyint(3) unsigned NOT NULL,
  `type` enum('WEBLOG','MICROBLOG') CHARACTER SET utf8 DEFAULT NULL,
  `indegree` int(4) unsigned NOT NULL,
  `lon` float DEFAULT NULL,
  `lat` float DEFAULT NULL,
  `state` varchar(50) CHARACTER SET utf8 DEFAULT '',
  `country` varchar(50) CHARACTER SET utf8 DEFAULT '',
  `hour` int(2) DEFAULT NULL,
  `gender` enum('MALE','FEMALE') CHARACTER SET utf8 DEFAULT NULL,
  `time_zone` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=687563 DEFAULT CHARSET=utf8mb4 KEY_BLOCK_SIZE=288 |

 mysql> INSERT INTO hourtmp  (  `title`,   `content`,   `guid` ,  `published` , `lang` ,  `type` ,  `indegree` ,  
 `lon` ,  `lat` ,  `state` ,  `country` , `hour`  )   VALUES ( "title" ,  "content 😊  content" ,  
 "guid" ,  1,  1,   "WEBLOG",  1,  1,  1,  "state" ,  "country" ,  1 );
 Query OK, 1 row affected, 2 warnings (0.00 sec)

 mysql> show warnings;

 | Level   | Code | Message                                                                       |

 | Warning | 1366 | Incorrect string value: '\xF0\x9F\x98\x8A  ...' for column 'content' at row 1 |
 | Warning | 1265 | Data truncated for column 'published' at row 1                                |

 2 rows in set (0.00 sec)

 mysql> select * from hourtmp;
 +--------+-------+-----------------------+
 | id     | title | content               |
 +--------+-------+-----------------------+
 | 687560 | title | content ????  content |
 | 687561 | title | content ????  content |
 +--------+-------+-----------------------+

আমি এখন অ্যাপ্লিকেশন স্তরের সমস্ত বিশেষ অক্ষরকে অপসারণ করছি, সুতরাং এটি আমার পক্ষে এতটা সমস্যা নয়। তবে, আমি জানতে চাই যে কোনওভাবে মাইএসকিউএল থেকে ডেটা পাওয়া এবং পাওয়া সম্ভব কিনা।
ব্রায়ান হান্ট

কোনও মাইএসকিউএল লোক নয়, তবে uft8TEXT
আপনিও

আপনি কি নাম রেখেছেন utf8mb4; clientোকানো ইস্যু করার আগে আপনার ক্লায়েন্ট থেকে?
atxdba

জেএনকে, পাঠ্য ক্ষেত্রটি সারণিতে ডিফল্ট ব্যবহার করছে, এই ক্ষেত্রে utf8mb4।
ব্রায়ান হান্ট

atxdba। পরামর্শের জন্য ধন্যবাদ, এখনও হিসাবে প্রকাশিত হয়?, সম্ভবত সম্ভবত দুর্নীতিগ্রস্ত মানে। ধিক্কারপূর্ণ সেই ইমোটিকনস / ডিসেপ্টিকনস! ;)
ব্রায়ান হান্ট

উত্তর:


22

আমি সম্প্রতি লিখেছি কিভাবে মাইএসকিউএল এর থেকে স্যুইচ করার জন্য একটি বিস্তারিত গাইড utf8করার জন্যutf8mb4 । আপনি যদি সেখানে পদক্ষেপগুলি অনুসরণ করেন তবে সবকিছু সঠিকভাবে কাজ করা উচিত। প্রক্রিয়াটির প্রতিটি পৃথক পদক্ষেপের জন্য এখানে সরাসরি লিঙ্কগুলি রয়েছে:

আমি সন্দেহ করি যে 5 টি পদক্ষেপ অনুসরণ করে আপনার সমস্যার সমাধান করা যেতে পারে আশা করি এটি সাহায্য করে!


1
সেই চাকরিটি পরীক্ষা / যাচাই করতে এতটা অক্ষম রেখে দিয়েছে। তবে আমি সন্দেহ করি যে কোলেশন-সার্ভার = utf8mb4_unicode_ci সেটিংটি যা অনুপস্থিত ছিল। ভাল টিউটোরিয়াল!
ব্রায়ান হান্ট

খুব সুন্দর ম্যাথিয়াস। লোকেদের জন্য একটি অনুস্মারক, আপনার ক্লায়েন্ট সংযোগের বিশদটি গুরুত্বপূর্ণ। আমি এনপিএম মডিউলটি ব্যবহার করছিmysql নোড থেকে , এবং charset: 'utf8mb4'আমার createConnection()কলটিতে নির্দিষ্ট করা দরকার , অন্যথায় সত্যই ইউটিএফ 8 অক্ষর সন্নিবেশ করা Incorrect string valueত্রুটি সহ এখনও ব্যর্থ হয়েছে , এমনকি সারণী এবং কলামটি utf8mb4অক্ষর সেট এবং কোলেশনে রূপান্তরিত করার পরেও । আমি আশা করি পদক্ষেপ 5 এ আপনার ক্লায়েন্ট কনফিগার স্তর স্তরের বিশদ একই রকম প্রভাব ফেলবে।
নীল

2

নিম্নলিখিত জিনিসগুলি করুন:

  1. ডাটাবেস চরসেটটি utf8mb4 এ সেট করুন

  2. Utf8mb4 এ কলামের অক্ষর সেট করুন

কোয়েরির নীচের মত:

ALTER TABLE `comments` CHANGE `text` `text` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

এই পদক্ষেপ কি আসলেই যথেষ্ট? গৃহীত উত্তরের আরও অনেক কিছু রয়েছে।
কলিন টি হার্ট

সমস্যাটি কী ছিল তার উপর নির্ভর করে, যদি সমস্যাটি ডাটাবেসের পাশে থাকে তবে এটি যথেষ্ট। তবে এটি খুব ভাল ক্লায়েন্ট সংযোগ সমস্যাও হতে পারে।
স্পাইডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.