Danke erstmal für die Klarstellung:
$pits_uid = uniqid();
Also etwas wie "5819f3ad1c0ce". Hoffentlich hast Du die Warnungen gelesen. Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
Falls Du (wegen der Warnungen) eine UUID willst.
- Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
CREATE TABLE table ( col binary(16) PRIMARY KEY );
INSERT INTO table ( col ) VALUES ( UUID_BIN( UUID() ) );
Anzeigbar Lesen:
SELECT BIN_UUD( col ) FROM table LIMIT 1;
Selektieren anhand UUID:
SELECT * FROM table WHERE col = UUID_BIN( "586bcc2d-9a96-11e6-852c-4439c456d444" );
Große Geheimnisse für PHP auf Linux:
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}