Index: wp-includes/version.php
===================================================================
--- wp-includes/version.php	(revision 11556)
+++ wp-includes/version.php	(working copy)
@@ -15,7 +15,7 @@
  *
  * @global int $wp_db_version
  */
-$wp_db_version = 11548;
+$wp_db_version = 11557;
 
 /**
  * Holds the TinyMCE version
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 11556)
+++ wp-includes/functions.php	(working copy)
@@ -621,8 +621,8 @@
 
 	// Get the ID, if no ID then return
 	// expected_slashed ($name)
-	$option = $wpdb->get_row( "SELECT option_id, autoload FROM $wpdb->options WHERE option_name = '$name'" );
-	if ( is_null($option) || !$option->option_id )
+	$option = $wpdb->get_row( "SELECT autoload FROM $wpdb->options WHERE option_name = '$name'" );
+	if ( is_null($option) )
 		return false;
 	// expected_slashed ($name)
 	$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name = '$name'" );
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 11556)
+++ wp-settings.php	(working copy)
@@ -262,7 +262,7 @@
  */
 $wpdb->field_types = array( 'post_author' => '%d', 'post_parent' => '%d', 'menu_order' => '%d', 'term_id' => '%d', 'term_group' => '%d', 'term_taxonomy_id' => '%d',
 	'parent' => '%d', 'count' => '%d','object_id' => '%d', 'term_order' => '%d', 'ID' => '%d', 'commment_ID' => '%d', 'comment_post_ID' => '%d', 'comment_parent' => '%d',
-	'user_id' => '%d', 'link_id' => '%d', 'link_owner' => '%d', 'link_rating' => '%d', 'option_id' => '%d', 'blog_id' => '%d', 'meta_id' => '%d', 'post_id' => '%d',
+	'user_id' => '%d', 'link_id' => '%d', 'link_owner' => '%d', 'link_rating' => '%d', 'blog_id' => '%d', 'meta_id' => '%d', 'post_id' => '%d',
 	'user_status' => '%d', 'umeta_id' => '%d', 'comment_karma' => '%d', 'comment_count' => '%d');
 
 $prefix = $wpdb->set_prefix($table_prefix);
Index: wp-admin/includes/upgrade.php
===================================================================
--- wp-admin/includes/upgrade.php	(revision 11556)
+++ wp-admin/includes/upgrade.php	(working copy)
@@ -269,6 +269,7 @@
 
 	wp_check_mysql_version();
 	wp_cache_flush();
+	pre_schema_upgrade();
 	make_db_current_silent();
 	upgrade_all();
 	wp_cache_flush();
@@ -554,8 +555,10 @@
 		if ( 1 != $option->dupes ) { // Could this be done in the query?
 			$limit = $option->dupes - 1;
 			$dupe_ids = $wpdb->get_col( $wpdb->prepare("SELECT option_id FROM $wpdb->options WHERE option_name = %s LIMIT %d", $option->option_name, $limit) );
-			$dupe_ids = join($dupe_ids, ',');
-			$wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)");
+			if ( $dupe_ids ) {
+				$dupe_ids = join($dupe_ids, ',');
+				$wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)");
+			}
 		}
 	}
 
@@ -1656,4 +1659,23 @@
 	}
 }
 
-?>
+/**
+ * Runs before the schema is upgraded.
+ */
+function pre_schema_upgrade() {
+	global $wp_current_db_version, $wp_db_version, $wpdb;
+
+	// Only run if less than 2.9
+	if ( $wp_current_db_version >= 11557 )
+		return;
+
+	// Delete duplicate options.  Keep the option with the highest option_id.
+	$delete_options = $wpdb->get_col("SELECT o1.option_id FROM wp_options AS o1 JOIN wp_options AS o2 ON o2.option_name = o1.option_name AND o2.option_id > o1.option_id");
+	if ( empty($delete_options) )
+		return;
+
+	$delete_options = implode("', '", $delete_options);
+	$wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($delete_options)");
+}
+
+?>
\ No newline at end of file
Index: wp-admin/includes/schema.php
===================================================================
--- wp-admin/includes/schema.php	(revision 11556)
+++ wp-admin/includes/schema.php	(working copy)
@@ -94,13 +94,10 @@
   KEY link_visible (link_visible)
 ) $charset_collate;
 CREATE TABLE $wpdb->options (
-  option_id bigint(20) unsigned NOT NULL auto_increment,
-  blog_id int(11) NOT NULL default '0',
   option_name varchar(64) NOT NULL default '',
   option_value longtext NOT NULL,
   autoload varchar(20) NOT NULL default 'yes',
-  PRIMARY KEY  (option_id,blog_id,option_name),
-  KEY option_name (option_name)
+  PRIMARY KEY  (option_name)
 ) $charset_collate;
 CREATE TABLE $wpdb->postmeta (
   meta_id bigint(20) unsigned NOT NULL auto_increment,
