Error 1396 (HY000) "Operation CREATE USER failed" เกิดขึ้นเมื่อพยายามสร้าง User ที่มีอยู่แล้ว หรือมีปัญหากับ Host/Plugin การแก้ไขคือตรวจสอบก่อนสร้าง หรือใช้ CREATE USER IF NOT EXISTS (MySQL 8.0.13+)
สร้าง User ให้ถูกต้อง
1. Syntax พื้นฐาน
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
2. ตัวอย่างสร้าง User 'Emma'@'localhost'
mysql> create user 'Emma'@'localhost' IDENTIFIED BY 'emma_654'; Query OK, 0 rows affected (0.00 sec)
3. ตรวจสอบ User ที่สร้าง
mysql> select user, host from mysql.user;
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | Charlie | % | | Robert | % | | User2 | % | | mysql.infoschema | % | | mysql.session | % | | mysql.sys | % | | root | % | | @UserName@ | localhost | | Adam | localhost | | Adam Smith | localhost | | Chris | localhost | | David | localhost | | Emma | localhost | ← User ใหม่ปรากฏ | Jace | localhost | | James | localhost | | John | localhost | | John Doe | localhost | | Michael | localhost | | Mike | localhost | | Robert | localhost | | User1 | localhost | | am | localhost | | hbstudent | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | +------------------+-----------+ 26 rows in set (0.00 sec)
สาเหตุ Error 1396 และวิธีแก้
| สาเหตุ | อาการ | วิธีแก้ |
|---|---|---|
| User มีอยู่แล้ว | ERROR 1396 | DROP USER ก่อน หรือใช้ IF NOT EXISTS |
| Host ไม่ตรง | User 'a'@'%' vs 'a'@'localhost' ต่างกัน | ระบุ Host ให้ถูกต้อง |
| Plugin Authentication | caching_sha2_password vs mysql_native_password | ระบุ Plugin: IDENTIFIED WITH mysql_native_password BY 'pass' |
| Reserved Account | mysql.sys, mysql.session, etc. | อย่าสร้าง User ชื่อเหล่านี้ |