Ada fungsi tanggal tertentu di MySQL yang mengembalikan nama hari atau nama bulan. Secara khusus, saya mengacu pada DATE_FORMAT()
, DAYNAME()
, dan MONTHNAME()
fungsi. Ini mungkin mengembalikan nilai katakanlah, November , atau Senin , tergantung pada kueri yang digunakan. Tetapi hasilnya dapat dengan mudah dikembalikan dalam bahasa yang berbeda jika diperlukan.
Bahasa yang digunakan fungsi-fungsi ini untuk nilai kembaliannya berasal dari lc_time_names
variabel sistem. Anda dapat melihat nilai variabel ini atau mengatur SESSION
nilai sehingga hasil dari fungsi-fungsi ini dalam bahasa/lokal yang diinginkan.
Nama lokal memiliki subtag bahasa dan wilayah yang terdaftar oleh Internet Assigned Numbers Authority (IANA). Contohnya termasuk en_US
untuk Bahasa Inggris – Amerika Serikat , en_NZ
untuk Bahasa Inggris – Selandia Baru , atau es_PA
untuk Spanyol – Panama , dll (untuk daftar lokal yang didukung oleh MySQL, lihat Daftar Lengkap Lokal di MySQL).
Dalam artikel ini, saya akan menunjukkan cara menemukan lokal saat ini untuk koneksi Anda, mengubahnya, lalu melihat bagaimana pengaruhnya terhadap hasil kueri. Saya juga menunjukkan kepada Anda fungsi yang kebal terhadap pengaturan ini (tapi jangan khawatir, fungsi ini memungkinkan Anda menentukan lokal).
Lihat Lokal Saat Ini
Pertama, mari kita lihat apa nilai saat ini dari lc_time_names
variabel sistem.
PILIH @@lc_time_names;
Hasil:
+-----------------+| @@lc_time_names |+-----------------+| en_US |+-----------------+
Jadi lokal saya saat ini adalah en_US
. Ini sebenarnya adalah nilai default terlepas dari setelan lokal sistem Anda (tetapi ini dapat diubah saat server mulai atau dengan menyetel GLOBAL
nilai).
Ubah Lokal
Sekarang mari kita ubah lokal dan lihat hasilnya.
SET lc_time_names ='de_BE';SELECT @@lc_time_names;
Hasil:
+-----------------+| @@lc_time_names |+-----------------+| de_BE |+------------------+
Dalam hal ini, saya mengubah lokal menjadi de_BE
, yaitu untuk Jerman – Belgia .
Contoh Penggunaan
Berikut adalah contoh di mana saya mengatur lokal, lalu menjalankan kueri yang mengembalikan nama bulan. Saya kemudian menyetel lokal ke nilai yang berbeda, lalu menjalankan kueri yang sama lagi.
Lokal Pertama:Inggris – Amerika Serikat
SET lc_time_names ='en_US';SELECT MONTHNAME('1999-10-03');
Hasil:
+-------------------------+| NAMA BULAN('1999-10-03') |+-------------------------+| Oktober |+-------------------------+
Lokal ke-2:Spanyol – Spanyol
SET lc_time_names ='es_ES';SELECT MONTHNAME('1999-10-03');
Hasil:
+-------------------------+| NAMA BULAN('1999-10-03') |+-------------------------+| oktubre |+--------------+
Fungsi FORMAT()
Nilai lc_time_names
tidak mempengaruhi FORMAT()
fungsi, tetapi fungsi ini menerima argumen ke-3 yang memungkinkan Anda menentukan lokal. Ini contoh yang saya maksud.
SET lc_time_names ='de_DE';SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
Hasil:
+-----------------+--------------------------+| FORMAT (1234, 0) | FORMAT (1234, 0, 'de_DE') |+-----------------+-------------------- ------+| 1,234 | 1.234 |+-----------------+--------------------------+Jadi meskipun saya mengatur
lc_time_names
kede_DE
pertama, panggilan awal keFORMAT()
mengabaikan itu. Ketika saya memanggil fungsi untuk kedua kalinya, saya secara eksplisit menetapkan bahasa/lokal yang sama dengan argumen ke-3, dan itu berhasil.