วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2559

การเปลี่ยนชื่อ Project และ Package ของ Android Studio 1.5

มีหลายครั้งที่เราต้องการ คัดลอก และ วาง Project ของ Android เพื่อปรับแก้ไข หรือ เพิ่มคุณลักษณะ แต่ยังคงรักษา Project เดิมเอาไว้

การเปลี่ยนชื่อ Project อย่างเดียวยังไม่พอ ต้องเปลี่ยนชื่อ Package ด้วย เพราะ Android ถือว่า ชื่อ Package จะต้องไม่ซ้ำกัน ถ้าเปลี่ยนชื่ออย่างเดียว เมื่อนำขึ้นเผยแพร่ จะทำให้เกิดปัญหาได้

วิธีการเปลี่ยนชื่อ Project และ Package

  1. ไปที่ห้อง Project ของ Android คัดลอก และวาง ห้อง Project ที่ต้องการคัดลอก 
  2. วาง และเปลี่ยนชื่อห้อง เช่น จากของเดิม engExamPrepPro4 เป็น engExamPrepPro5
  3. เปิด Android Studio และเลือก Import Project
  4. เลือก Project ที่เปลี่ยนชื่อแล้ว ในตัวอย่างคือ engExamPrepPro5
  5. รอสักครู่ Project ใหม่พร้อมชื่อใหม่จะเปิดขึ้น
  6. ที่ หน้าต่าง Explorer ของ Android Studio ให้เลือก Android
  7. ไปที่ห้อง Package ของ Project แล้วคลิกขวา 
  8. คลิกขวา เลือก Refactor > Rename
  9. จะเกิดหน้าจอโต้ตอบ ให้เลือก Rename Package
  10. จะเกิดหน้าจอโต้ตอบ ให้ระบุชื่อ Package พร้อมทั้งให้แก้ไขชื่อทั้งหมดใน Project แล้วกด Refactor
  11. รอสักครู่ เมื่อ Android ค้นหาข้อความเสร็จเรียบร้อยแล้ว จะนำมาแสดงให้ทราบ ให้กด Do Refactor เพื่อให้เปลี่ยนชื่อทั้งหมด
  12. เพื่อให้การทำงานสมบูรณ์ โปรแกรมจะขอให้ทำการ Sync ใหม่ ให้กด Sync Now
  13. เมื่อดูที่โค้ด จะเห็นว่า ชื่อของ Package เปลี่ยนไปตามที่ต้องการ

วันพุธที่ 10 กุมภาพันธ์ พ.ศ. 2559

ตัวหนังสืออ่านไม่ออก เป็นเครื่องหมายคำถาม

การเปลี่ยนการเข้ารหัส หรือ Collation ฐานข้อมูลบน Server มักจะสร้างปัญหาเกี่ยวกับตัวอักษร ทำให้อ่านไม่ออก กลายเป็นเครื่องหมายคำถาม หรือ ตัวอักษรต่างดาวก็มี ดังตัวอย่างข้างล่างนี้


สาเหตุเกิดจากการไม่เข้ากันของการกำหนดชุดอักษร บนฐานข้อมูล MySql ใน Server และการใช้ encoding ของไฟล์ ตลอดจนการกำหนดชุดตัวอักษร หรือ charset บนหน้าเว็บ ทำให้มีปัญหาไม่ลงตัว Browser จึงแสดงออกมาเป็นเครื่องหมายคำถาม หรือ ข้อความต่างดาว อ่านไม่ออก

เมื่อสังเกตจากตัวอย่าง จะเห็นว่า บางตัวก็เป็นตัวหนังสือธรรมดา แต่บางตัวก็เป็นตัวอ่านไม่ออก ที่เป็นเช่นนี้เพราะ ตัวที่อ่านไม่ออก เป็นข้อมูลที่ดึงออกมาจากฐานข้อมูลบน Server ส่วนตัวที่อ่านออก เป็นส่วนที่เขียนโค้ดในหน้าเว็บ ในตัวอย่างนี้ หน้าเว็บกำหนด charset เป็น tis-620

วิธีการแก้ไข

หลังจากที่ติดต่อกับฐานข้อมูลแล้ว ให้ใช้คำสั่ง mysql_set_charset() เพื่อเปลี่ยนให้เป็น charset ที่ใช้ในหน้าเว็บ เช่น

                                $cid = mysql_connect($host,$usr,$pwd);
mysql_set_charset("tis620",$cid);
mysql_select_db($db);

เมื่อเปลี่ยนแล้ว ตัวหนังสือก็จะแสดงตามปกติ


อีกปัญหาหนึ่งที่เกิดขึ้นคือ ไม่สามารถใช้คำสั่ง SQL ในตารางในฐานข้อมูลได้ ทั้ง ๆ ที่คำสั่ง SQL ถูกต้องทุกประการ ที่เป็นเช่นนี้ เพราะ encoding ไม่ตรงกัน เช่น

คำสั่ง SQL

$sql = "SELECT * from student where title='$title' AND fname='$fname' AND lname='$lname' AND b_day='$b_day' AND b_month='$b_month' AND b_year='$b_year'";

$result = mysql_query($sql) or die("Couldn't execute query!!!");

ไม่สามารถเข้าไปในตารางฐานข้อมูลได้ ดังผลปรากฎที่หน้าจอ
การแก้ไขคือ ปรับ encoding ของ ฐานข้อมูลให้เข้ากับที่ใช้ในหน้าเว็บ ด้วยคำสั่ง mysql_query("SET NAMES tis620"); โดยสั่งก่อนหน้าที่จะใช้คำสั่ง mysql_query() เช่น

$sql = "SELECT * from student where title='$title' AND fname='$fname' AND lname='$lname' AND b_day='$b_day' AND b_month='$b_month' AND b_year='$b_year'";

mysql_query("SET NAMES tis620");
$result = mysql_query($sql) or die("Couldn't execute query!!!");

ก็จะแก้ปัญหาไป ได้


ชุดตัวอักษรที่ ฐานข้อมูล MySql ที่ใช้ได้ มีหลายชุด คือ
mysql> SHOW CHARACTER SET;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset           | binary              |      1 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
+----------+---------------------------------+---------------------+--------+




อ้างอิง
http://php.net/manual/en/function.mysql-set-charset.php
http://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html