MySQL Harf Duyarlı masalar Dönüşüm

3 Cevap php

Ben karışık durumda bizim MySQL tabloları gidermek için yazılmış bir PHP kod temeli var. Örneğin, xar_intakeformgenerator_ChangeLog.

Bizim kodu da windows üzerinde çalışır ve biz daha iyi tanımadan önce, bir Windows sunucu üzerine çeşitli veritabanları ithal. Bu, Windows MySQL düşük durumunda tüm tablo adları değişen sonuçlandı. (xar_intakeformgenerator_changelog). Biz şimdi yeni veritabanlarına bunu engellemek için biliyorum. MySQL sadece Windows üzerinde tabloları durumunda umurumda değil, çünkü (Set lower_case_table_names) Ve, kod, Windows sunucular üzerinde iyi çalışır.

İşte sorun bu. Windows sunucu bize keder veriyor ve biz bir Linux sunucu kapalı tüm veritabanlarını taşımak gerekir. Tablo isimleri tüm alt durumda çevirdim, çünkü kod Linux üzerinde çalışacak. Neyse ki, Xaraya tablo eşlemeleri oluşturur. Yani, teoride, ben bu veritabanları için yeni bir kod tabanı kurmak ve küçük harf tabloları kullanmak için her modülün eşlemeleri değiştirebilir. Biz tablo durum doğru almak için Linux makine üzerine aktardıktan sonra veya, elle tablo adlarını değiştirebilir.

lower_case_table_names bayrağı ayarlanmış önce karıştırıldıysa veritabanlarının düzeltmez değişiyor. Bunların hepsi küçük harf tablo isimleri var.

Ben seçeneği hakkında ya da vahşi değilim. Herkes bu işlemek için ustaca bir yol biliyor mu?

3 Cevap

Tamam. Cevabı buldum.

Linux sunucu üzerinde, ben davayı düşürmek için benim Linux tüm tablo adlarını değiştirmek için oluşturulan aşağıdaki veritabanlarını çalıştırmak için gerekli:

  1. Nasıl alt harf şeklinde bir şema tüm tabloları yeniden adlandırır bir SQL komut dosyası üretmek için:

    select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') 
    from information_schema.tables where table_schema = 'your_schema_name';
    
  2. Veritabanlarının yeniden adlandırıldı phpmyadmin adlarını küçük harfe.

  3. Modifiye my.cnf Linux sunucu üzerinde kullanmak için lower_case_table_names=1

  4. Yeniden başlatılması mysql.

Bundan sonra, benim kod alt durum tablo adları ile çalışmak istiyorsunuz. Yani, ben, Windows olanları ithalat ve hem de aynı kod tabanı iş var başardı.

Eğer doğru hatırlıyorum (had the same kind of problem a while back -- but I stopped working on that project before we decided which solution to adopt...), tablenames (harf-küçük harf duyarlı duyarlı ya da değil) nasıl kullanılması gerektiğini söyleyen bir yapılandırma seçeneği vardır.

İşte ne buldum: Identifier Case Sensitivity

O sayfayı alıntı:

If you are using MySQL on only one platform, you do not normally have to change the lower_case_table_names variable from its default value. However, you may encounter difficulties if you want to transfer tables between platforms that differ in file system case sensitivity. For example, on Unix, you can have two different tables named my_table and MY_TABLE, but on Windows these two names are considered identical. To avoid data transfer problems arising from lettercase of database or table names, you have two options:

  • Use lower_case_table_names=1 on all systems. The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do not see the names in their original lettercase.

    • Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows. This preserves the lettercase of database and table names.

(There is more I didn't copy-paste ; so going to read that page might be a good idea ;-) )

Bu yardımcı olur umarım ...

lower_case_table_names

Windows, varsayılan olarak "her şeyin küçük harf yapmak" (1). "Vaka duyarsız ama olduğu gibi davayı tutmak": 2 olarak ayarlayın.

Bu değişiklikler my.cnf içine gitmek