web-dev-qa-db-fra.com

Classement par défaut de la table lors de l'activation du plugin?

Je suis this pour que mon plug-in crée automatiquement une table lorsque le plug-in est activé, table est latin1_swedish_ci ... Pourquoi n'est-ce pas aussi utf8? Je pensais que ce serait aussi utf8 par défaut puisque j'ai:

define('DB_COLLATE', 'utf8_general_ci');

dans mon wp-config.php ... J'ai tout exactement la même chose que dans le lien fourni, sauf le nom de la fonction, et j'ai différents champs SQL ... Comment faire la table créée utf8 par défaut?

c'est ma fonction:

function duende_install() {
global $wpdb;
global $duende_db_version;

$table_name = $wpdb->prefix . "duendes";
if($wpdb->get_var("show tables like '$table_name'") != $table_name) {
    $sql = "CREATE TABLE " . $table_name . " (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        shape tinytext NOT NULL,
        integrity tinytext NOT NULL,
        length tinytext NOT NULL,
        drone tinytext NOT NULL,
        wood tinytext NOT NULL,
        mouth tinytext NOT NULL,            
        rim tinytext NOT NULL,
        bell tinytext NOT NULL,                     
        loud tinytext NOT NULL,                     
        mass tinytext NOT NULL,                     
        finish tinytext NOT NULL,   
        inlay tinytext NOT NULL,                    
        price smallint DEFAULT '0' NOT NULL,
        sold tinytext NOT NULL,                                             
        UNIQUE KEY id (id)
    );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);

    add_option("duende_db_version", $duende_db_version);
}
}

Je vous remercie

6
pootzko

Vous oubliez le fait qu'il existe un classement non seulement pour la base de données mais également pour les tables et même les champs.

Par conséquent, de votre point de vue, je suppose que votre instruction CREATE TABLE est "incomplète". Avant d'utiliser des instructions SQL, veuillez d'abord apprendre la langue.

Voir CREATE TABLE Syntaxe (Manuel MySQL) .

Surtout table_options/table_option et [DEFAULT] COLLATE [=] collation_name, il se trouve ici.

METTRE À JOUR:

Veuillez consulterConfiguration du jeu de caractères et du classement de la base de données Wordpresspour une description détaillée de l'emplacement et de la procédure de configuration de wordpress en ce qui concerne le jeu de caractères et le classement.

5
hakre

juste au cas où quelqu'un aurait besoin de ça, vous pourriez définir le classement de cette façon ... la ligne après la partie UNIQUE KEY id (id) devrait ressembler à ceci:

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
7
pootzko

Je me sers de ça

  global $wpdb;
  // $charset_collate = $wpdb->get_charset_collate(); //This outputs an unsupported charset for a lot of non english speakers for some reason
  $charset_collate = "";
  $collation = $wpdb->get_row("SHOW FULL COLUMNS FROM {$wpdb->posts} WHERE field = 'post_content'");

  if(isset($collation->Collation)) {
    $charset = explode('_', $collation->Collation);

    if(is_array($charset) && count($charset) > 1) {
      $charset = $charset[0]; //Get the charset from the collation
      $charset_collate = "DEFAULT CHARACTER SET {$charset} COLLATE {$collation->Collation}";
    }
  }

  if(empty($charset_collate)) { $charset_collate = $wpdb->get_charset_collate(); } //Okay fine, we'll try it your way
0
Paul

L'objet $wpdb a maintenant une fonction membre pour récupérer le jeu de caractères et le classement sous forme de chaîne pouvant être ajoutée directement aux requêtes SQL CREATE TABLE.

$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name ( $fields ) $charset_collate;"

Cette chaîne s'alignera sur les valeurs WP_CHARSET et WP_COLLATE du fichier de configuration (si présent) et est utilisée en interne pour créer les tables par défaut de Wordpress.

0
Mack